package com.dartfar.menu.service;

import java.util.List;

import com.dartfar.menu.model.Menu;
import com.dartfar.menu.vo.MenuVo;

public interface MenuService {
	
	/**
	 * 添加功能
	 * @param menuVo 功能数据传输对象
	 * @return 返回添加功能的ID
	 */
	public int add(MenuVo menuVo);
	
	/**
	 * 添加功能
	 * @param function 功能对象
	 * @return 返回添加功能的ID
	 */
	public int add(Menu menu);
	
	/**
	 * 获取所有功能的列表
	 * @return 所有功能的列表
	 */
	public List<Menu> getList();
	
	/**
	 * 根据父ID和模块ID回去功能列表
	 * @param parentId 父ID
	 * @param moduleId 模块ID
	 * @return 返回功能列表
	 */
	public List<Menu> getListByParentId(int parentId, int mainId);
	
	
	/**
	 * 获取主菜单列表
	 * @return 返回菜单列表
	 */
	public List<Menu> getMainMenuLsit();
	
	/**
	 * 获取子菜单列表
	 * @return 返回菜单列表
	 */
	public List<Menu> getSubMenuList(int mainId);
	
	
	/**
	 * 判断某主菜单中是否有子菜单
	 * @param id 模块的ID
	 * @return 子菜单中是否存在功能
	 */
	public boolean existSubMenuByMenuId(int id);
	
	/**
	 * 根据角色权限获取功能方法
	 * @param role 角色对象
	 */
	public List<Menu> getMenuByRoleId(int roleId);
	
	/**
	 * 添加功能
	 * @param functionVo 功能数据传输对象
	 */
	public void modify(MenuVo menuVo);
	
	/**
	 * 删除功能
	 * @param id 功能的ID
	 */
	public void delete(int id);
	
	/**
	 * 根据功能的ID获取功能
	 * @param id 功能的ID
	 * @return 功能对象
	 */
	public Menu get(int id);
	
	/**
	 * 根据多个功能的ID获取功能列表 
	 * @param functionIds 多个功能的ID 格式:1,2,3 
	 * @return 返回功能列表 
	 */
	public List<Menu> getListByMenuIds(String menus);
	
	/**
	 * 修改功能
	 * @param function 功能对象
	 */
	public void modify(Menu menu);
	

	/**
	 * 根据链接获取功能对象
	 * @param string 链接地址
	 */
	public Menu getByTarget(String string);


	/**
	 * 根据模块ID批量删除功能
	 * @param id 模块ID
	 */
	public void batchDeleteByModuleId(int id);

}
